# -*- coding: utf-8 -*-

import os
import time
from dotenv import load_dotenv, find_dotenv
from app.enum.app import LoggerEnum

# 加载环境变量
load_dotenv(find_dotenv(), override=True)

base_dir = os.path.dirname(os.path.abspath(__file__))

# 日志路径, 如果不存在这个logs文件夹，就自动创建一个
log_path = os.path.join(base_dir, 'logs')

if not os.path.exists(log_path):
    os.mkdir(log_path)


class Config(object):
    # 调试模式
    DEBUG = os.environ.get('DEBUG', default='true').lower() in {"1", "t", "true"}
    # 项目根路径
    APP_ROOT_PATH = base_dir
    # mysql配置
    DB_HOST = os.environ.get('DB_HOST', default='127.0.0.1')
    DB_PORT = os.environ.get('DB_PORT', default='3306')
    DB_DATABASE = os.environ.get('DB_DATABASE', default='stock')
    DB_USERNAME = os.environ.get('DB_USERNAME', default='root')
    DB_PASSWORD = os.environ.get('DB_PASSWORD', default='password')
    # orm配置
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8" % (
        DB_USERNAME, DB_PASSWORD, DB_HOST, DB_PORT, DB_DATABASE)
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = DEBUG
    # tushare配置
    TUSHARE_API_TOKEN = os.environ.get('TUSHARE_API_TOKEN', default='token')
    # 日志配置
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,
        'formatters': {
            # 日志格式
            'standard': {
                'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
                          '[%(levelname)s]- %(message)s'},
            'simple': {  # 简单格式
                'format': '%(levelname)s %(message)s'
            },
        },
        # 过滤
        'filters': {
        },
        # 定义具体处理日志的方式
        'handlers': {
            # 默认记录所有日志
            'default': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(log_path, 'default-{}.log'.format(time.strftime('%Y-%m-%d'))),
                'maxBytes': 1024 * 1024 * 5,  # 文件大小
                'backupCount': 5,  # 备份数
                'formatter': 'standard',  # 输出格式
                'encoding': 'utf-8',  # 设置默认编码，否则打印出来汉字乱码
            },
            # 输出异常日志
            'exception': {
                'level': 'ERROR',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(log_path, 'exception-{}.log'.format(time.strftime('%Y-%m-%d'))),
                'maxBytes': 1024 * 1024 * 5,  # 文件大小
                'backupCount': 5,  # 备份数
                'formatter': 'standard',  # 输出格式
                'encoding': 'utf-8',  # 设置默认编码
            },
            # 控制台输出
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'standard'
            },
        },
        # 配置用哪几种 handlers 来处理日志
        'loggers': {
            # 默认的应用日志处理器
            LoggerEnum.SERVER: {
                'handlers': ['default'],
                'level': 'INFO',
                'propagate': False
            },
            # 错误日志处理器
            LoggerEnum.EXCEPTION: {
                'handlers': ['exception'],
                'level': 'ERROR',
                'propagate': False
            },
        }
    }
